#define _CRT_SECURE_NO_WARNINGS 1

/*
*	小乐乐排电梯
*/

//int main()
//{
//    int n = 0;
//    scanf("%d", &n);
//    int time = 0;
//    if (n < 12)
//    {
//        time = 2;
//    }
//    else
//    {
//        time = n / 12 * 4 + 2;
//    }
//    printf("%d\n", time);
//    return 0;
//}

/*
*   最大公约数与最小公倍数的和
*/

//#include <stdio.h>
//
//int main()
//{
//    long long n = 0;
//    long long m = 0;
//    scanf("%lld %lld", &n, &m);
//    long long div = n > m ? m : n;
//    while (div)
//    {
//        if (n % div == 0 && m % div == 0)
//        {
//            break;
//        }
//        div--;
//    }
//    long long mul = n * m / div;
//    printf("%lld\n", div + mul);
//    return 0;
//}



/*
*	辗转相除法求两个数的最大公约数
*/

//#include <stdio.h>
//
//int main()
//{
//	int a = 0;
//	int b = 0;
//	scanf("%d %d", &a, &b);
//	int max = a;
//	int min = b;
//	if (max < min)
//	{
//		max = b;
//		min = a;
//	}
//	int c = 1;
//	while (c)
//	{
//		c = max % min;//余数
//		max = min;//上一次的除数作为新的被除数
//		min = c;//上一次的余数作为新的除数
//	}
//	printf("%d\n", max);
//	return 0;
//}

/*
*	小乐乐改数字
*/

//法一：该方法不能针对那些n很大的情况
//#include <stdio.h>
//
//int main()
//{
//    int n = 0;
//    scanf("%d", &n);
//    char num[1000] = { 0 };
//    int i = 0;
//    while (n)
//    {
//        int tmp = n % 10;
//        if (tmp % 2 == 0)
//        {
//            num[i] = '0';
//        }
//        else
//        {
//            num[i] = '1';
//        }
//        n /= 10;
//        i++;
//    }
//    int j = 0;
//    for (j = i - 1; j >= 0; j--)
//    {
//        printf("%c", num[j]);
//    }
//    return 0;
//}

//法二：
//#include <stdio.h>
//#include <math.h>
//
//int main()
//{
//    long long n = 0;
//    scanf("%lld", &n);
//    long long sum = 0;//记录转换后的数
//    int i = 0;
//    while (n)
//    {
//        int tmp = n % 10;//取出n的最后一位数
//        if (0 == tmp % 2)//判断最后一位数是奇数还是偶数
//        {
//            tmp = 0;
//        }
//        else
//        {
//            tmp = 1;
//        }
//        sum += tmp * pow(10, i);
//        i++;
//        n /= 10;
//    }
//    printf("%lld", sum);
//    return 0;
//}

/*
*   环形链表：判断链表是否带环
*/

//bool hasCycle(struct ListNode* head)
//{
//    struct ListNode* fast = head;
//    struct ListNode* slow = head;
//    while (fast && fast->next)
//    {
//        fast = fast->next->next;
//        slow = slow->next;
//        if (fast == slow)
//        {
//            return true;
//        }
//    }
//    return false;
//}

/*
*   环形链表：返回环的入口点，如果链表没有环则返回NULL
*/

//struct ListNode* detectCycle(struct ListNode* head)
//{
//    struct ListNode* fast = head;
//    struct ListNode* slow = head;
//    while (fast && fast->next)
//    {
//        fast = fast->next->next;
//        slow = slow->next;
//        if (fast == slow)
//        {
//            while (head != fast)
//            {
//                head = head->next;
//                fast = fast->next;
//            }
//            return head;
//        }
//    }
//    return NULL;
//}


/*
*   kiki的期末成绩
*/

//#include <stdio.h>
//
//int main()
//{
//    int a = 0;
//    int b = 0;
//    int c = 0;
//    int d = 0;
//    scanf("%d %d %d %d", &a, &b, &c, &d);
//    float sum = a * 0.2 + b * 0.1 + c * 0.2 + d * 0.5;
//    printf("%.1f", sum);
//    return 0;
//}

/*
*   计算(a+b-c)*d
*/
//
//#include <stdio.h>
//
//int main()
//{
//    int a = 0;
//    int b = 0;
//    int c = 0;
//    int d = 0;
//    scanf("%d %d %d %d", &a, &b, &c, &d);
//    printf("%d", (a + b - c) * d);
//}

/*
*   牛牛的线段
*/
//
//#include <stdio.h>
//#include <math.h>
//
//int main()
//{
//    int x1 = 0;
//    int x2 = 0;
//    int y1 = 0;
//    int y2 = 0;
//    scanf("%d %d", &x1, &y1);
//    scanf("%d %d", &x2, &y2);
//    int ret = pow((x1 - x2), 2) + pow((y1 - y2), 2);
//    printf("%d", ret);
//    return 0;
//}


/*
*	kiki算数
*/

//#include <stdio.h>
//#include <math.h>
//int main()
//{
//    int a = 0;
//    int b = 0;
//    scanf("%d %d", &a, &b);
//
//    if (a >= 100 || b >= 100 || a + b >= 100)
//    {
//        int sum = a + b;
//        int ret = 0;
//        int i = 0;
//        int n = 2;
//        while (n--)
//        {
//            int tmp = sum % 10;
//            ret += tmp * pow(10, i);
//            sum /= 10;
//            i++;
//        }
//        printf("%d", ret);
//    }
//    else
//    {
//        printf("%d", a + b);
//    }
//    return 0;
//}

//判断元音还是辅音

//#include <stdio.h>

//int main()
//{
//    char a = 0;
//    while (~scanf("%c", &a))
//    {
//        getchar();//将输入字符之后的空格读走
//        if (a == 'a' || a == 'A' || a == 'e' || a == 'E'
//            || a == 'i' || a == 'I' || a == 'o' || a == 'O'
//            || a == 'u' || a == 'U')
//        {
//            printf("Vowel\n");
//        }
//        else
//        {
//            printf("Consonant\n");
//        }
//    }
//    return 0;
//}

//练习
//#include <stdio.h>
//
//int main()
//{
//    int x = 0;
//    int l = 0;
//    int r = 0;
//    scanf("%d %d %d", &x, &l, &r);
//    if (x >= l && x <= r)
//    {
//        printf("true\n");
//    }
//    else
//    {
//        printf("false\n");
//    }
//    return 0;
//}
//
//#include <stdio.h>
//
//int main()
//{
//    int n = 0;
//    scanf("%d", &n);
//    if (((0 == n % 4) && (0 != n % 100)) || (0 == n % 400))
//    {
//        printf("yes\n");
//    }
//    else {
//        printf("no");
//    }
//    return 0;
//}
//
//#include <stdio.h>
//
//int main()
//{
//    char ch = '0';
//    scanf("%c", &ch);
//    if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z'))
//    {
//        printf("YES\n");
//    }
//    else {
//        printf("NO\n");
//    }
//    return 0;
//}

//
//#include <stdio.h>
//
//int main()
//{
//    char arr[7] = { 0 };
//    scanf("%s", arr);
//    int month = (arr[4]-'0') * 10;
//    month += (arr[5]-'0');
//    if (month >= 3 && month <= 5)
//    {
//        printf("spring\n");
//    }
//    else if (month >= 6 && month <= 8)
//    {
//        printf("summer\n");
//    }
//    else if (month >= 9 && month <= 12)
//    {
//        printf("autumn\n");
//    }
//    else {
//        printf("winter\n");
//    }
//    return 0;
//}


//无重复字符的最长字串

#include <stdio.h>
#include <string.h>
#include <assert.h>
#include <stdlib.h>

//法一：
//void zero(int* p)
//{
//    int* cur = p;
//    int i = 0;
//    for (i = 0; i < 128; i++)
//    {
//        cur[i] = 0;
//    }
//}
//
//int lengthOfLongestSubstring(char* s)
//{
//    assert(s);
//    char* cur = s;
//    int a[128] = { 0 };
//    int sz = strlen(s);
//    int count = 0;
//    int prev = 0;
//    int i = 0;
//    for (i = 0; i < sz; i++)
//    {
//        if (a[cur[i]] == 0)
//        {
//            a[cur[i]] = 1;
//            count++;
//        }
//        else
//        {
//            zero(a);
//            cur += 1;
//            sz -= 1;
//            i = -1;
//            if (count > prev)
//            {
//                prev = count;
//            }
//            count = 0;
//        }
//    }
//    return count >= prev ? count : prev;
//}

//法二：
//int lengthOfLongestSubstring(char* s)
//{
//    char* cur = s;
//    int i = 0;//窗口右端
//    int j = 0;//窗口左端
//    int len = 0;
//    int result = 0;
//    size_t stringsSize = strlen(s);
//    int hash[128] = { 0 };
//    for (i = 0; i < stringsSize; i++)
//    {
//        hash[cur[i]] += 1;
//        while (hash[cur[i]] > 1)
//        {
//            hash[cur[j]] -= 1;
//            j++;
//        }
//        len = i - j + 1;
//        result = result > len ? result : len;
//    }
//    return result;
//}
//
//
//int main()
//{
//    char s[] = "abcabcbb";
//    int a = lengthOfLongestSubstring(s);
//    printf("%d\n", a);
//    return 0;
//}



//长度最小的子字符串
//
//int minSubArrayLen(int target, int* nums, int numsSize)
//{
//    if (numsSize == 0)
//    {
//        return 0;
//    }
//    int i = 0;//左边界
//    int j = 0;//右边界
//    int sum = 0;
//    int len = 0;
//    int result = 0;
//    for (j = 0; j < numsSize; j++)
//    {
//        sum += nums[j];
//        while (sum >= target)
//        {
//            //记录下满足条件的子数组的长度
//            len = j - i + 1;
//
//            //窗口满足条件，开始收缩窗口
//            sum -= nums[i];
//            i++;
//        }
//        if (result == 0)
//        {
//            result = len;
//        }
//        result = result < len ? result : len;
//    }
//    return result;
//}
//
//int main()
//{
//    int arr[] = { 2,3,1,2,4,3 };
//    int result = minSubArrayLen(7, arr, 6);
//    printf("%d\n", result);
//    return 0;
//}


//寻找两个正序数组的中位数

//double findMedianSortedArrays(int* nums1, int nums1Size, int* nums2, int nums2Size)
//{
//    int* nums = (int*)malloc(sizeof(int) * (nums1Size + nums2Size));
//    int i = 0;
//    int j = 0;
//    int z = 0;
//    for (i = 0, j = 0; i < nums1Size && j < nums2Size;)
//    {
//        if (nums1[i] <= nums2[j])
//        {
//            nums[z] = nums1[i];
//            i++;
//            z++;
//        }
//        else
//        {
//            nums[z] = nums2[j];
//            j++;
//            z++;
//        }
//    }
//    if (i == nums1Size)
//    {
//        for (; j < nums2Size; j++)
//        {
//            nums[z] = nums2[j];
//            z++;
//        }
//    }
//    else
//    {
//        for (; i < nums1Size; i++)
//        {
//            nums[z] = nums1[i];
//            z++;
//        }
//    }
//    int size = nums1Size + nums2Size;
//    if (0 == size % 2)
//    {
//        //合并数组为偶数
//        return (double)(nums[(size / 2) - 1] + nums[size / 2]) / 2;
//    }
//    else
//    {
//        //合并数组为奇数
//        return (double)nums[(size + 1) / 2 - 1];
//    }
//}
//
//int main()
//{
//    int arr1[] = { 1,3 };
//    int arr2[] = { 2 };
//    double result = findMedianSortedArrays(arr1, 2, arr2, 1);
//    printf("%lf", result);
//    arr1[1] = '\0';
//    return 0;
//}


#include <math.h>


int reverse(int x)
{
    long long tmp = x;
    int count = 0;

    //先判断是几位数
    while (tmp)
    {
        tmp /= 10;
        count++;
    }



    char* nums = (char*)malloc(sizeof(char) * (count + 2));
    if (nums == NULL)
    {
        perror("malloc");
        exit(-1);
    }
    int i = 0;

    //判断x是整数还是负数
    if (x > 0)
    {
        nums[0] = '+';
        i++;
    }
    else
    {
        nums[0] = '-';
        i++;
    }

    x = abs(x);//x转化为正数
    while (x)
    {
        nums[i] = x % 10+'0';
        x /= 10;
        i++;
    }
    nums[i] = '\0';
    int result = 0;
    long long test = 0;
    sscanf(nums, "%d", &result);
    sscanf(nums, "%lld", &test);
    if (test != result)
    {
        return 0;
    }
    else
    {
        return result;
    }
    
}

int reverse1(int x)
{
    int rev = 0;
    while (x != 0)
    {
        if (rev<INT_MIN / 10 || rev >INT_MAX / 10)
        {
            return 0;
        }
        int digit = x % 10;
        x /= 10;
        rev = rev * 10 + digit;
    }
    return rev;
}

int main()
{
    int a = -214;
    int result = reverse1(a);
	printf("%d", result);
    //long long c = pow(2, 31);
    //printf("%lld", c);
	return 0;
}